die Verwendung von Tabellen-Namen als parameter in der sql-Funktion
Möchte ich erstellen-Funktion, die die Verwendung von Tabellen-Namen als parameter. Wie ich Suche ich brauche dynamisches sql verwenden. Ich versuche diesen code:
CREATE FUNCTION get_column_id
(
@TableName VARCHAR(30),
@ColumnName VARCHAR(30),
)
RETURNS int
AS
BEGIN
IF EXISTS
(
DECLARE @SQL VARCHAR(50)
SET @sql = 'SELECT' + @ColumnName + 'FROM' + @TableName + 'WHERE @ColumnName = @ColumnNameValue';
EXEC(@sql)
)
BEGIN
Aber bekomme Fehler. Ist, wo jeder Weg, um procceed?
Ich versuche verwenden dynamisches sql in solcher Weise
DECLARE @SQL VARCHAR(50)
SET @SQL = 'SELECT' + @ColumnName + 'FROM' + @Table + 'WHERE @ColumnName = @ColumnNameValue'
EXEC(@SQL)
DECLARE @TableName table (Name VARCHAR(30))
INSERT INTO @TableName VALUES (@SQL)
IF EXISTS
(SELECT Name FROM @TableName WHERE Name = @ColumnNameValue)
Aber bekommen Invalid use of a side-effecting operator 'EXECUTE STRING' within a function.
Wer weiß, wie umgehen Sie diese Einschränkung?
Naja, man kann nicht dynamisches sql verwenden auf eine Funktion in SQL Server
InformationsquelleAutor genky | 2013-03-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Fehler ist die Verkettung der Zeichenfolge, die keine Leerzeichen dazwischen,
wenn zum Beispiel der Datentyp der Spalte den string ist, müssen Sie wickeln Sie den Wert mit einfachen Anführungszeichen,
UPDATE 1
Müssen Sie auch zu erklären, dass die parameter
@ColumnNameValue
, z.B.All deine Gedanken sind richtig, aber Sie können nicht verwenden Sie side-effecting-Anweisungen in SQL-SERVER-Benutzer definierte Funktion. Ich denke, dass er nicht in der Lage zu erreichen, seine Aufgabe.
Warum denkst du, er meinte
STORED PROCEDURE
?, der Fehler ist wahrscheinlich nur, dass er will, um dynamisches sql verwenden auf eine Funktion und ist nicht in der Lage zuInformationsquelleAutor John Woo
Einer UDF (user defined function) in der Sql Server muss deterministisch sein. Neben dem syntax-Fehler, die Sie nicht in der Lage zu erfüllen Ihre Aufgabe.
wenn Sie diese Artikel auf MSDN:
http://msdn.microsoft.com/en-us/library/ms178091.aspx
Dir können siehe die Quellenangabe unten:
InformationsquelleAutor gustavodidomenico