Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL返回错误的顺序_C#_Sql_Sql Server - Fatal编程技术网

C# SQL返回错误的顺序

C# SQL返回错误的顺序,c#,sql,sql-server,C#,Sql,Sql Server,我正在尝试使用SQL建立一个对象类,以便将来在我的应用程序中使用。基本上,通过一个表名传递它,它将返回类粘贴到c中的语法# 它在一定程度上起作用,但有些项目以奇怪的顺序返回: DECLARE @TableName VARCHAR(50) SELECT @TableName ='Users' select 'public class obj_' + @TableName + '{' union SELECT 'public '+ CASE WHEN t.name IN ('int', 'big

我正在尝试使用SQL建立一个对象类,以便将来在我的应用程序中使用。基本上,通过一个表名传递它,它将返回类粘贴到c中的语法#

它在一定程度上起作用,但有些项目以奇怪的顺序返回:

DECLARE @TableName VARCHAR(50)
SELECT @TableName ='Users'

select 'public class obj_' + @TableName + '{'
union

SELECT 'public '+ CASE WHEN t.name IN ('int', 'bigint') THEN 'Int32'
            WHEN t.name IN ('nvarchar','varchar','text','ntext') THEN 'String'
            WHEN t.name IN ('datetime','smalldatetime') THEN 'DateTime'
            WHEN t.name IN ('decimal') THEN 'Decimal'
            WHEN t.name IN ('bit') THEN 'Boolean'
            ELSE 'Unknown' END
+ ' ' + c.name + '{ get; set; }' FROM syscolumns as c

JOIN systypes t ON t.xusertype=c.xusertype
WHERE id IN (SELECT id FROM sysobjects WHERE name=@TableName) 
union
Select '}'
它的返回方式如下:

}
public Boolean IsAdmin{ get; set; }
public class obj_Users{
public Int32 UserCompanyID{ get; set; }
public Int32 UserID{ get; set; }
public Int32 UserRole{ get; set; }
public String Email{ get; set; }
public String FirstName{ get; set; }
public String SessionKey{ get; set; }
public String Surname{ get; set; }
public String UserName{ get; set; }
public String UserPassword{ get; set; }

尝试按
colid
订购。鉴于您的查询,这有点困难,但这可能会奏效:

select 'public class obj_' + @TableName + '{'
union all
(SELECT 'public '+ CASE WHEN t.name IN ('int', 'bigint') THEN 'Int32'
            WHEN t.name IN ('nvarchar','varchar','text','ntext') THEN 'String'
            WHEN t.name IN ('datetime','smalldatetime') THEN 'DateTime'
            WHEN t.name IN ('decimal') THEN 'Decimal'
            WHEN t.name IN ('bit') THEN 'Boolean'
            ELSE 'Unknown' END
+ ' ' + c.name + '{ get; set; }' FROM syscolumns as c

JOIN systypes t
     ON t.xusertype=c.xusertype
WHERE id IN (SELECT id FROM sysobjects WHERE name=@TableName) 
ORDER BY colid)
union all
Select '}'
更可靠的解决方案是使用子查询:

select str
from ((select -1 as ordering, 'public class obj_' + @TableName + '{' as str
      union all
      (SELECT colid,
             'public '+
              (CASE WHEN t.name IN ('int', 'bigint') THEN 'Int32'
                   WHEN t.name IN ('nvarchar','varchar','text','ntext') THEN 'String'
                   WHEN t.name IN ('datetime','smalldatetime') THEN 'DateTime'
                   WHEN t.name IN ('decimal') THEN 'Decimal'
                   WHEN t.name IN ('bit') THEN 'Boolean'
                   ELSE 'Unknown'
               END) + ' ' + c.name + '{ get; set; }'
       FROM syscolumns c JOIN
            systypes t
            ON t.xusertype=c.xusertype
       WHERE id IN (SELECT id FROM sysobjects WHERE name = @TableName) 
      ) union all
      (Select 10000, '}')
     )
ORDER BY ordering

如果没有ORDER BY,则结果行没有定义的顺序。什么是“错误”?您的代码中没有任何类型的ORDERBY,因此不确定是什么使任意顺序中的一个“正确”。此外,您正在尝试解决一个以前已经解决过一百万次的问题。从外观上看,您需要ORM。UNION语句没有顺序。他们在一起。还有,不要在这个问题上浪费时间了,请。。。代码/模式生成有很多现有的、经过尝试和测试的解决方案。嗨,戈登,谢谢你的帮助。我想子问题更合理,但它似乎不喜欢“关键字“order”附近的“不正确语法”部分的顺序